package com.example.netty.inoutbound;

import io.netty.buffer.Unpooled;
import io.netty.channel.ChannelHandlerContext;
import io.netty.channel.SimpleChannelInboundHandler;
import io.netty.util.CharsetUtil;

public class MyClientHandler extends SimpleChannelInboundHandler {
    @Override
    protected void channelRead0(ChannelHandlerContext ctx, Object msg) throws Exception {
        System.out.println("服务器的ip="+ ctx.channel().remoteAddress() +";读取到客户端返回的数据" + msg);
    }

    // 重写 channelActive 发送数据
    @Override
    public void channelActive(ChannelHandlerContext ctx) throws Exception {
        System.out.println("MyClientHandler 发送数据");
//        ctx.writeAndFlush(Unpooled.copiedBuffer())
        // 1.12 个字节
        // 2. 该处理器的前一个 handler 是 MyLongToByteEncoder
        // MyLongToByteEncoder 父类是 MessageToByteEncoder
        /*
        @Override
    public void write(ChannelHandlerContext ctx, Object msg, ChannelPromise promise) throws Exception {
        ByteBuf buf = null;
        try {
            if (acceptOutboundMessage(msg)) { // 是不是该 encoder 应该处理的信息，可以在这打断点
                @SuppressWarnings("unchecked")
                I cast = (I) msg;
                buf = allocateBuffer(ctx, cast, preferDirect);
                try {
                    encode(ctx, cast, buf); // 如果是才调用
                } finally {
                    ReferenceCountUtil.release(cast);
                }

                if (buf.isReadable()) {
                    ctx.write(buf, promise);
                } else {
                    buf.release();
                    ctx.write(Unpooled.EMPTY_BUFFER, promise);
                }
                buf = null;
            } else {
                ctx.write(msg, promise); // 如果不是，则交给下一额处理器处理
            }
        }
        4.我们在编写 Encoder 时，要注意传入的数据类型和处理的数据类型一致
         */
        // 所以这段代码不会走 MyLongToByteEncoder ，他不是 Long 类型
//        ctx.writeAndFlush(Unpooled.copiedBuffer("abcdabcdabcd", CharsetUtil.UTF_8));
        // 下面这行代码会走 MyLongToByteEncoder
        ctx.writeAndFlush(123456L); // 发送一个 long
    }
}
